package com.robert.BCH;

public class primitivePoly {
    /**
     * 在这里给出一些生成多项式，直接调用参数获取即可，不必要利用sagemath获取
     * 本质是预先把sagemath的计算结果存储到这里，用的时候直接从这里拿
     * 主要是因为所需要的生成多项式的个数不多，可以直接手动输入并保存
     *
     *      * 可以通过sagemath获得生成多项式，步骤如下：
     *      * 1.打开sagemath或网页版sagecell(https://sagecell.sagemath.org/)
     *      * 2.如果是本地sagemath则输入notebook(),显示 Open your web browser to http://localhost:8080 时即可
     *      *   首次使用sagemath需要设置登陆密码，如果使用sagecell则忽略此步骤
     *      * 3.计算生成元，输入：
     *      *     k.<a> = GF(32, modulus="primitive")
     *      *     k.modulus()
     *      *   然后执行，即可得到本原多项式
     *      * 4.对于本原多项式按照polynomial类得到具体的多项式，如GF(32)域上，其中32=2^m，即参数m=5时，得到结果x^5 + x^2 + 1，
     *      *   则new polynomial("100101")即可，具体见单元测试文件parametersTest
     */

    private final polynomial[] primitives = new polynomial[]{
            new polynomial("1011"),
            new polynomial("10011"),
            new polynomial("100101"),
            new polynomial("1011011"),
            new polynomial("10000011"),
            new polynomial("100011101"),
            new polynomial("1000010001"),
            new polynomial("10000001001")
    };

    public polynomial getPrimitivePoly(int m) throws Exception {
        if(m>10){
            throw new Exception("m<=10");
        }
        return primitives[m-3];
    }
}
